<?  
 /** 
* @generator Le Classificateur 2.01 beta 
* @author Yann Boisclair-Roy 
* @date 2008/06/12
* @desc Classe qui contrôle les données de la table vue_pointage
*/  
 
 class Pointage {

 	/**
 	* @desc Flag qui détermine si la recherche devra se faire avec des LIKE '%%' ou des " = "
 	* @var boolean
 	*/
 	var $rechercheExact = true; 
 
 	/**
 	* @desc Objet de connexion à la base de données
 	* @var Bd
 	*/
 	var $oBd; 
 	/**
 	* @desc Variable qui contient un bout de SQL qui déterminera l'ordre selon les voeux de l'usager
 	* @var string
 	*/
 	var $ordre; 
 	/**
 	* @desc Variable qui contient un bout de SQL qui déterminera la limite selon les voeux de l'usager
 	* @var String
 	*/
 	var $limite; 
 	/**
 	* @desc Variable qui contient un Array des résultats provenant de la requête SQL par GetInfos
 	* @var Array
 	*/
 	var $resultat; 
 	/**
 	* @desc Variables équivalente au champs noMontagne de la table vue_pointage
 	* @var int
 	*/
 	 var $noMontagne;
 
 	/**
 	* @desc Variables équivalente au champs noCritere de la table vue_pointage
 	* @var int
 	*/
 	 var $noCritere;
 
 	/**
 	* @desc Variables équivalente au champs moyenne de la table vue_pointage
 	* @var float
 	*/
 	 var $moyenne;
 
 	/**
 	* @desc Variables équivalente au champs nbVotes de la table vue_pointage
 	* @var int
 	*/
 	 var $nbVotes;
 

 	/**
 	* @desc Constructeur de la class vue_pointage. Si à l'instenciation de la classe on lui donne un numéro de clé primaire, 
 	*  celle-ci instenciera la class avec toutes les infos dans la table vue_pointage concernant cette clé primaire.
 	* @access public
 	* @param	Bd	oBd
 	* @param int noMontagne
 	*/
 	 function Pointage ( $oBd, $noMontagne = 0 ) { 
 	 	 $this->oBd = $oBd; 
  	 	 if( $noMontagne > 0 ) {  
  	 	 	 $this->noCritere = $noMontagne; 
  	 	 	 $this->getInfos(); 
  	 	 } 
 	 }  
 
   	/**
 	* @desc Fonction mutatrice du champ noMontagne
 	* @access public
 	* @param intnoMontagne
 	*/
	function setNoMontagne ( $noMontagne ) {
		$this->noMontagne = intval( $noMontagne );
	}


 	/**
 	* @desc Fonction accesseur du champ noMontagne
 	* @access public
 	* @return int
 	*/
	 function getNoMontagne (){
	 	 return stripslashes( noMontagne);
	}


 	/**
 	* @desc Fonction mutatrice du champ noCritere
 	* @access public
 	* @param intnoCritere
 	*/
	function setNoCritere ( $noCritere ) {
		$this->noCritere = intval( $noCritere );
	}


 	/**
 	* @desc Fonction accesseur du champ noCritere
 	* @access public
 	* @return int
 	*/
	 function getNoCritere (){
	 	 return stripslashes( noCritere);
	}


 	/**
 	* @desc Fonction mutatrice du champ moyenne
 	* @access public
 	* @param floatmoyenne
 	*/
	function setMoyenne ( $moyenne ) {
		$this->moyenne = addslashes( $moyenne ) ;
	}


 	/**
 	* @desc Fonction accesseur du champ moyenne
 	* @access public
 	* @return float
 	*/
	 function getMoyenne (){
	 	 return stripslashes( moyenne);
	}


 	/**
 	* @desc Fonction mutatrice du champ nbVotes
 	* @access public
 	* @param intnbVotes
 	*/
	function setNbVotes ( $nbVotes ) {
		$this->nbVotes = intval( $nbVotes );
	}


 	/**
 	* @desc Fonction accesseur du champ nbVotes
 	* @access public
 	* @return int
 	*/
	 function getNbVotes (){
	 	 return stripslashes( nbVotes);
	}


 	/**
 	* @desc Fonction mutatrice de la limite
 	* @access public
 	* @param string limite
 	*/
 	 function setLimite( $limite ) {  
 	 	 $this->limite =  $limite;  
 	 }  
 
   	/**
 	* @desc Fonction mutatrice de l'ordre
 	* @access public
 	* @param string ordre
 	*/
 	 function setOrdre( $ordre ) {  
 	 	 $this->ordre =  $ordre;  
 	 }  
 
   	/**
 	* @desc Fonction mutatrice de resultats
 	* @access public
 	* @return Array Resultats
 	*/
 	 function getResultats() {  
 	 	 return $this->resultats; 
 	 }  
 
   	/**
 	* @desc Fonction d'ajout et de mise à jour des données.
 	* @access public
 	* @return int
 	*/
	 function sauvegarde() { 
 		$req = "INSERT INTO vue_pointage ( noMontagne, noCritere, moyenne, nbVotes )  VALUES  ( " . $this->noMontagne . ", " . $this->noCritere . ", " . $this->moyenne . ", " . $this->nbVotes . ") ON DUPLICATE KEY UPDATE noMontagne = " . $this->noMontagne . ", noCritere = " . $this->noCritere . ", moyenne = " . $this->moyenne . ", nbVotes = " . $this->nbVotes . ""; 
  		$this->oBd->query( $req );
 	 }  
  
  	/**
 	* @desc Fonction de recherche de données
 	* @access public
 	* @param string champs
 	*/
 	 function getInfos( $champs = "*" ) {
  		$variables = array( 'noMontagne','noCritere','moyenne','nbVotes'); 
  		 $trouve = false; 
 		 $recherche = ' 1 = 1 '; 
 		 $operateurDebut = " = '"; 
 		 $operateurFin = "'"; 
 		 if( !$this->rechercheExact ) {  
  			 $operateurDebut = " LIKE '%"; 
  			 $operateurFin = "%'"; 
  		 }  
  		 for ( $i = 0; $i < count( $variables ); $i++ ) { 
 			if ( !empty( $this->$variables[ $i ] ) ) {  
 				 $trouve = true; 
 				 /* Ajout de l'opérateur */ 
  				 if ( !empty( $recherche ) ) { 
 					 $recherche .= " AND "; 
 				 } 
  				 $variable = $variables[ $i ];
 				 $tableau = $this->$variable;
 				 $valeur = $tableau[ 0 ];
 				 /* Concaténation des critères de recherche */ 
  				 if ( is_numeric( $valeur ) ) { 
 					 $recherche .= "vue_pointage." . $variables[ $i ] . " = " . $valeur. " "; 
 				 } else { 
 					 $recherche .= "vue_pointage." . $variables[ $i ] . $operateurDebut . addslashes( $valeur ) . $operateurFin; 
 				 } 
  			 } 
  		 } 
  		 $infos = $this->oBd->query( "SELECT " . $champs . " FROM vue_pointage WHERE " . $recherche . $this->ordre . $this->limite ); 
 		 $this->resultats = $infos;
 		 $this->cleanup();
 		 for ( $i = 0; $i < count( $infos ); $i++ ) { 
	 	 	$this->noMontagne = $infos[ $i ][ 'noMontagne'] ; 
	 	 	$this->noCritere = $infos[ $i ][ 'noCritere'] ; 
	 	 	$this->moyenne = $infos[ $i ][ 'moyenne'] ; 
	 	 	$this->nbVotes = $infos[ $i ][ 'nbVotes'] ; 
 		 } 
  	} 
  	/**
 	* @desc Fonction de suppression des données.
 	* @access public
 	*/
 	function delete() {
 		 $req = "DELETE FROM vue_pointage WHERE noCritere = " . $this->noCritere; 
  		 $this->oBd->query( $req );
 	 } 

 	/**
 	* @desc Indique si la recherche dois etre exact ou pas ( true = LIKE '%x%' )" ),
 	* @access public
 	*/
 	 function setRechercheExact( $b ) {  
 	 	 $this->rechercheExact =  $b;  
 	 }
	 
	 /**
	 *	@desc focntion qui calcul le pointage de toutes les montagnes selon chaque critères
	 *	@access public
	 */
	 function calculPointage() {
		/* Compilation des votes */
		$objVote = new Vote( $this->oBd );
		$tabCompilation = $objVote->getMoyenneMontagneCategorie();		
		/* entrer de la compilation dans la BD */
		foreach( $tabCompilation as $noMontagne => $critere ) { 
			foreach( $critere as $noCritere => $compilation ) {
				$this->setNoMontagne( $noMontagne );
				$this->setNoCritere( $noCritere );
				$this->setMoyenne( ( $compilation[ 'totalNote' ] / $compilation[ 'nbVote' ] ) );
				$this->setNbVotes( $compilation[ 'nbVote' ] );
				$this->sauvegarde();
				$this->cleanup();
			}
		}
	 } 
	 
     /**
     * @desc vas chercher la moyenne des votes Toute catégories confondue par montagne
     * @access public
     */
	 function calculClassement() {
	 	$req = "SELECT 
                        SUM( vue_pointage.nbVotes ) as totalVote,
                        AVG( vue_pointage.moyenne ) as moyenne,
                        vue_pointage.noMontagne
                FROM
                        vue_pointage
                GROUP BY
                        vue_pointage.noMontagne";
        $tab = $this->oBd->query( $req );
        /* Pour chaque montagne trouvée.... */
        foreach( $tab as $montagne ){
            $req = "INSERT INTO vue_classement
                            ( noMontagne, moyenne, nbVotes )
                    VALUES  ( " . $montagne[ 'noMontagne' ] . ", " . $montagne[ 'moyenne' ] . ", " . $montagne[ 'totalVote' ] . " ) 
                    ON DUPLICATE KEY UPDATE
                            moyenne = " . $montagne[ 'moyenne' ] . ", nbVotes = " . $montagne[ 'totalVote' ];
            $this->oBd->query( $req );
        }
	 } 
 
   	/**
 	* @desc Fonction remet les variables membres à zéro
 	* @access private
 	*/
 	 function cleanup() { 
 	 	$this->noMontagne = array(); 
  	 	$this->noCritere = array(); 
  	 	$this->moyenne = array(); 
  	 	$this->nbVotes = array(); 
  	 }  
 
  }
?>